package modelo.bean;

import java.math.BigDecimal;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

@Entity
@Table(name="filme")
public class Filme extends BeanGenerica{

	@Id
	@GeneratedValue
	@Column(name="id_filme", nullable = false)
	private Integer idFilme;
	
	@Column(name="ds_titulo", nullable = false)
	private String dsTitulo;
	
	@Column(name="cd_filme", nullable = false)
	private String cdFilme;
	
	@Column(name="tempo_duracao", nullable = false)
	@Temporal(TemporalType.DATE)
	private Date tempoDuracao;
	
	@Column(name="qt_cd", nullable = false)
	private Integer qtCd;
	
	@Column(name="qt_exemplares", nullable = false)
	private Integer qtExemplares;
	
	@Column(name="vl_diaria", nullable = false)
	private BigDecimal vlDiaria;
	
	@Column(name="nr_classificacao", nullable = false)
	private Integer nrClassificacao;
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name="fk_categoria", insertable=true, updatable=true, nullable=false)
	@Fetch(FetchMode.JOIN)
	@Cascade(CascadeType.SAVE_UPDATE)
	private Categoria categoria;
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name="fk_ator_protagonista", insertable=true, updatable=true, nullable=false)
	@Fetch(FetchMode.JOIN)
	@Cascade(CascadeType.SAVE_UPDATE)
	private Ator atorProtagonista;
	
	@Column(name="nm_personagem_protagonista", nullable = false)
	private String nmPersonagemProtagonista;
	
	public Integer getIdFilme() {
		return idFilme;
	}
	public void setIdFilme(Integer idFilme) {
		this.idFilme = idFilme;
	}
	public String getDsTitulo() {
		return dsTitulo;
	}
	public void setDsTitulo(String dsTitulo) {
		this.dsTitulo = dsTitulo;
	}
	public String getCdFilme() {
		return cdFilme;
	}
	public void setCdFilme(String cdFilme) {
		this.cdFilme = cdFilme;
	}
	public Date getTempoDuracao() {
		return tempoDuracao;
	}
	public void setTempoDuracao(Date tempoDuracao) {
		this.tempoDuracao = tempoDuracao;
	}
	public Integer getQtCd() {
		return qtCd;
	}
	public void setQtCd(Integer qtCd) {
		this.qtCd = qtCd;
	}
	public Integer getQtExemplares() {
		return qtExemplares;
	}
	public void setQtExemplares(Integer qtExemplares) {
		this.qtExemplares = qtExemplares;
	}
	public BigDecimal getVlDiaria() {
		return vlDiaria;
	}
	public void setVlDiaria(BigDecimal vlDiaria) {
		this.vlDiaria = vlDiaria;
	}
	public Integer getNrClassificacao() {
		return nrClassificacao;
	}
	public void setNrClassificacao(Integer nrClassificacao) {
		this.nrClassificacao = nrClassificacao;
	}
	public Categoria getCategoria() {
		return categoria;
	}
	public void setCategoria(Categoria categoria) {
		this.categoria = categoria;
	}
	public Ator getAtorProtagonista() {
		return atorProtagonista;
	}
	public void setAtorProtagonista(Ator atorProtagonista) {
		this.atorProtagonista = atorProtagonista;
	}
	public String getNmPersonagemProtagonista() {
		return nmPersonagemProtagonista;
	}
	public void setNmPersonagemProtagonista(String nmPersonagemProtagonista) {
		this.nmPersonagemProtagonista = nmPersonagemProtagonista;
	}
}
